import pymysql
import c_account

#数据库配置
db_host = 'localhost'
db_user = 'root'
db_passwd = '123456'
db_dbname = 'bugcount'





#数据库操作

class DB():
    def __init__(self, host='localhost', port=3306, db='', user='root', passwd='123456', charset='utf8'):
        # 建立连接
        self.conn = pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset=charset)
        # 创建游标，操作设置为字典类型
        self.cur = self.conn.cursor(cursor = pymysql.cursors.DictCursor)

    def __enter__(self):
        # 返回游标
        return self.cur

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 提交数据库并执行
        self.conn.commit()
        # 关闭游标
        self.cur.close()
        # 关闭数据库连接
        self.conn.close()

#定义数据库操作
#参数 ip  用户名 密码 数据库名,必须要传1个参数
def withDB(sql1, *sqlN):
#    with DB(host='localhost', user='root', passwd='123456', db='bugcount') as db:
    with DB(host=db_host, user=db_user, passwd=db_passwd, db=db_dbname) as db:
        #db.execute('show databases')
        #默认执行第一条语句
        db.execute(sql1)
        #执行结果
        print(db)
        for i in db:
            print(i)

        #查询方法参数个数，根据参数个数执行语句
        print("sql1==", sql1)
        print("sqlN==", sqlN)

        fun_args_nums = len(sqlN)
        print("方法参数个数有： %s " % len(sqlN))
        print("不确定参数，第一个数为====", sqlN[0])
        if fun_args_nums == 1:
            #执行第二条语句
            db.execute(sqlN[0])
            #执行结果
            print(db)
            for i in db:
                print(i)


#测试链接，打印版本

def db_test():
    # 打开数据库连接
    db = pymysql.connect(db_host, db_user, db_passwd, db_dbname)

    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()

    # 使用 execute()  方法执行 SQL 查询
    cursor.execute("SELECT VERSION()")

    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()

    print("Database version : %s " % data)

    # 关闭数据库连接
    cursor.close()
    db.close()

#打开数据库
#1. sql 2. 参数后面的匹配变量
def execute_db_onesql(sql, *args):
    # 打开数据库连接

    db = pymysql.connect(db_host, db_user, db_passwd, db_dbname)
    print("*args====", args)

    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()

    # 使用 execute()  方法执行 SQL 查询
    try:
        # 执行sql语句
        cursor.execute(sql, args)
        # 提交到数据库执行
        db.commit()
        #执行语句，返回结果
        sql_return_result = cursor.fetchall()
        print("执行语句返回结果：", sql_return_result) #返回元祖
        print("执行语句返回结果(类型)==", type(sql_return_result))
        print("sql语句执行成功")
        # 返回成功标识，成功是True
        #拼接返回数据,返回列表
        return_list = [200, sql_return_result]
        print('执行sql 返回的数据类型====', type(return_list))
        return return_list
        # return True
    except:
        # 如果发生错误则回滚
        print('sql语句执行失败')
        db.rollback()
        # 拼接返回数据,返回列表
        return_list = [500, 'null']
        print('执行sql 返回的数据类型====', type(return_list))
        return return_list

    finally:
        # 不管是否异常，都关闭数据库连接
        cursor.close()
        db.close()
















